前一篇文章有先提到我們要使用 Dynamic Programming 來找出 OBST,這章節就要告訴大家怎麼來找啦,但在進入怎麼找之前,我們先來了解一些符號,確保我們有共通的語言來看!
:為內部節點
:為內部節點加權值
:外部節點的加權值,這邊要注意,因為外部節點會比內部節點多一顆,所以權值也會多一個
所構成的OBST,要注意是由 node 開始喔
的 Cost
的加權值總合
的root
我們先想想,想要找出總搜尋成本最小的BST,就是要找出由 組成的BST中最小的Cost
那要怎麼作,我們先來求 Cost,先令 為此樹的 Root
則左子樹:
右子樹:
左子樹的 cost:若只單看左子樹,那成本就是 ,然而,實際狀況是多了一個 Root,因此每個節點 level 都會多 1,所以要加上該子樹所有點的權重,才會等於實際左子樹的 cost,也就是
右子樹的 cost:若只單看右子樹,那成本就是 ,然而,實際狀況是多了一個 Root,因此每個節點 level 都會多 1,所以要加上該子樹所有點的權重,才會等於實際右子樹的 cost,也就是
因此整顆樹的Cost可以看成,左子樹 cost、右子樹 cost、root cost 加起來的結果
我們可以化簡一下,把式子簡化成,就是我們的cost Solution
接下來,我們只要精心挑選一個合適的 root k 就可以讓搜尋總成本降到最低囉
我們可以把式子看成這樣